Thema: Expanding Horizons

Whats all the fuzz about - Automated Softwaretesting with Modern Fuzzing

Fuzzing ist eine dynamische Software-Testing-Methode, die ihren Ursprung in den 80er Jahren hat. Dabei wird durch randomisierte Eingaben das zu testende Programm auf Robustheit geprüft. In der Vergangenheit nur selten verwendet, hat Fuzzing mittlerweile eine deutlich höhere Bedeutung für das Software-Testing gewonnen. Mit modernen Methoden wie den Genetischen Algorithmen des „Coverage-based Fuzzing“ (AFL oder libFuzzer) und optimierten Solver-APIs bei der symbolischen Ausführung ist es heute deutlich einfacher, schnell und effizient Sicherheits- und Zuverlässigkeitsprobleme in der Software zu finden. Leider ist der Aufwand diese Technologien zu nutzen mit enormen Hürden wie z.B. durch die Anpassung der bestehenden Build-Prozessen, APIs und Interfaces.

Um das moderne Fuzzing dennoch auf allen Systemen zu ermöglichen, wurde ein Framework geschaffen, welches das verwenden der verschiedenen Fuzzing- (AFL, libFuzzer) sowie Symbolic-Code-Execution-Frameworks (Klee, QSym) deutlich vereinfacht. Damit ist es nicht mehr nötig, dass die bestehenden Build-Prozesse sowie die bestehenden Interfaces geändert werden müssen, was den einstieg in das moderne Fuzzing deutlich vereinfacht.

Ein weitere Schwierigkeit beim verwenden von Fuzzing sind Schnittstellen, die strukturierte Daten (wie z.B. JSON oder XML-Schnittstellen) erwarten. Denn hier landen die meisten randomisierten Eingaben der Fuzzing-Engine im Parser. Um das Projekt dennoch effektiv fuzzen zu können ist bis dato ein erheblicher manueller Aufwand nötig, um die Schnittstellen zu abstrahieren. Unser Framework dagegen bietet eine einfache Schnittstelle für strukturierte Daten, sodass der manuelle Integrationsaufwand deutlich reduziert wird.

Christian Hartlage

Christian Hartlage develops new methods at Code Intelligence GmbH to make the company’s testing solution based on coverage-based fuzzing even more efficient. After his B.Sc. in Computer Science at the University of Bonn he gained experience in automated malware analysis as security researcher at Fraunhofer FKIE. He is currently finishing his master thesis on “Evaluation of Structured Interface Fuzzing” at the University of Bonn and at Code Intelligence.